package com.ruyuan2020.im.design.mandator.use;

import com.ruyuan2020.im.design.mandator.use.command.Command;
import com.ruyuan2020.im.design.mandator.use.command.TurnOffLightCommand;
import com.ruyuan2020.im.design.mandator.use.command.TurnOnLightCommand;

// 客户端代码

/**
 * 在这个例子中，SmartHomeController不再直接调用Light对象的方法，而是通过Command接口间接地执行操作
 * ，这种间接层允许在不修改调用者和接收者的情况下添加新功能，比如日志记录。此外，由于调用者和接收者之间的解耦，
 * 可以轻松地替换灯光控制的实现，比如使用远程服务器来控制灯光，而不需要修改SmartHomeController的代码。
 */
public class Client {
    public static void main(String[] args) {
        // 创建灯光对象
        Light light = new Light();

        // 创建智能家居控制器对象
        SmartHomeController controller = new SmartHomeController();

        // 创建并打开灯光命令
        Command turnOnCommand = new TurnOnLightCommand(light);
        controller.executeCommand(turnOnCommand);

        // 创建并关闭灯光命令
        Command turnOffCommand = new TurnOffLightCommand(light);
        controller.executeCommand(turnOffCommand);

        // 撤销上一个命令（关闭灯光），灯光应该会再次打开
        controller.undoLastCommand();
    }
}
